using System;
using TestCases.Utils.Pairs;

namespace TestCases.CompareAssert.Core.Interfaces
{
    public interface ICompareContext : IPair<IComparerObject, IComparerObject>
    {
        object LValue { get; }
        object RValue { get; }

        string LPath { get; }
        string RPath { get; }

        Type LType { get; }
        Type RType { get; }

        IResultBuilderFactory Factory { get; }

        ICompareContext ForIndexedObjects(object left, object right, params object[] indexes);
        ICompareContext ForMethodObjects(object left, object right, string methodName, params object[] parameters);
        ICompareContext ForEntityObjects(object left, object right, string entityName);
        ICompareContext ForObjects(IComparerObject left, IComparerObject right);
        ICompareContext ForFactory(IResultBuilderFactory factory);
        ICompareContext Reverse();
    }
}